package com.hotel.controle;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.hibernate.Session;

import com.hotel.dao.ConsumoDAO;
import com.hotel.dao.HospedagemDAO;
import com.hotel.dao.ProdutoDAO;
import com.hotel.entidade.Consumo;
import com.hotel.entidade.Hospedagem;
import com.hotel.entidade.Produto;
import com.hotel.util.HibernateUtil;

@ManagedBean(name = "consumoBean")
@SessionScoped
public class ConsumoControle {

	private Session session;
	private ConsumoDAO consumoDAO;
	private ProdutoDAO produtoDAO;
	private HospedagemDAO hospedagemDAO;
	private Consumo consumo;
	private Produto produto;
	private Hospedagem hospedagem;
	@SuppressWarnings("rawtypes")
	private DataModel listaConsumos;
	private String keyword = "";

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public ConsumoDAO getConsumoDAO() {
		return consumoDAO;
	}

	public void setConsumoDAO(ConsumoDAO consumoDAO) {
		this.consumoDAO = consumoDAO;
	}

	public ProdutoDAO getProdutoDAO() {
		return produtoDAO;
	}

	public void setProdutoDAO(ProdutoDAO produtoDAO) {
		this.produtoDAO = produtoDAO;
	}

	public HospedagemDAO getHospedagemDAO() {
		return hospedagemDAO;
	}

	public void setHospedagemDAO(HospedagemDAO hospedagemDAO) {
		this.hospedagemDAO = hospedagemDAO;
	}

	public Consumo getConsumo() {
		return consumo;
	}

	public void setConsumo(Consumo consumo) {
		this.consumo = consumo;
	}
	
	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public Hospedagem getHospedagem() {
		return hospedagem;
	}

	public void setHospedagem(Hospedagem hospedagem) {
		this.hospedagem = hospedagem;
	}
	
	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	@SuppressWarnings("rawtypes")
	public DataModel getListaConsumos() {
		if(this.listaConsumos == null) {
			listarConsumos();
		}
		return listaConsumos;
	}
	
	public void listarConsumos() {
		session = HibernateUtil.configureSessionFactory().openSession();
		consumoDAO = new ConsumoDAO(session);
		List<Consumo> lista = consumoDAO.listaTodos();
		listaConsumos = new ListDataModel<Consumo>(lista);
	}
	
	public String buscarConsumo() {
		session = HibernateUtil.configureSessionFactory().openSession();
		consumoDAO = new ConsumoDAO(session);
		List<Consumo> lista = consumoDAO.pesquisarConsumo(this.getKeyword());
		listaConsumos = new ListDataModel<Consumo>(lista);
		this.keyword = null;
		return "/consumos/buscaConsumo";
	}
	
	public String preparaInserirConsumo() {
		produto = new Produto();
		hospedagem = new Hospedagem();
		consumo = new Consumo();
		return "/consumos/inserirConsumo";
	}

	public String inserirConsumo() {
		session = HibernateUtil.configureSessionFactory().openSession();
		consumoDAO = new ConsumoDAO(session);
		produtoDAO = new ProdutoDAO(session);
		hospedagemDAO = new HospedagemDAO(session);
		try{
			setProduto(produtoDAO.buscaPorId(getProduto().getCodigo()));
			setHospedagem(hospedagemDAO.buscaPorId(getHospedagem().getCodigo()));
			consumo.setProduto(getProduto());
			consumo.setHospedagem(hospedagem);
			consumoDAO.insere(consumo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		listarConsumos();
		return "/consumos/buscaConsumo";
	}

	public String preparaAlterarConsumo() {
		consumo = (Consumo) (listaConsumos.getRowData());
		return "/consumos/alterarConsumo";
	}

	public String alterarConsumo() {
		session = HibernateUtil.configureSessionFactory().openSession();
		consumoDAO = new ConsumoDAO(session);
		produtoDAO = new ProdutoDAO(session);
		hospedagemDAO = new HospedagemDAO(session);
		try{
			setProduto(produtoDAO.buscaPorId(getConsumo().getProduto().getCodigo()));
			setHospedagem(hospedagemDAO.buscaPorId(getConsumo().getHospedagem().getCodigo()));
			hospedagem.setConsumos(null);
			produto.setConsumos(null);
			consumo.setProduto(getProduto());
			consumo.setHospedagem(getHospedagem());
			consumoDAO.atualisa(consumo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		listarConsumos();
		return "/consumos/buscaConsumo";
	}

	public String excluirConsumo() {
		Consumo consumo = (Consumo) (listaConsumos.getRowData());
		consumoDAO = new ConsumoDAO(session);
		try{
			consumoDAO.deleta(consumo);
		} catch(Exception e){
			e.printStackTrace();
		}
		listarConsumos();
		return "/consumos/buscaConsumo";
	}

}
